package day1_array.leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * 连续最长子串问题
 * 滑动窗口
 * @Author: yuisama
 * @Date: 2022/3/30 16:23
 * @Description:
 */
public class Num3_LengthOfLongestSubString {
    // 滑动窗口
    public int lengthOfLongestSubstring(String s) {
        // s[l..r]一直是不重复子串
        int l = 0;
        int r = -1;
        // 最大连续子串
        int max = 0;
        // 窗口中字符以及出现的次数
        Map<Character,Integer> map = new HashMap<>();
        while (l < s.length()) {
            if (r < s.length() - 1 && map.getOrDefault(s.charAt(r + 1),0) == 0) {
                // r + 1出现不重复字符，加入窗口
                r ++;
                map.put(s.charAt(r),1);
            }else {
                // 出现重复字符，移动左窗口
                map.put(s.charAt(l),0);
                l ++;
            }
            // s[l..r]一直是不重复字符窗口
            max = Math.max(max,r - l + 1);
        }
        return max;
    }
}
